home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2000 #4
/
Amiga Plus CD - 2000 - No. 4.iso
/
Vollversion
/
CamD
/
development
/
examples
/
capture
/
capture_tm.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-05-15
|
21KB
|
832 lines
/* Code generated by Toolmaker V1.13 */
/* Includes */
#include <stdlib.h>
#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <exec/memory.h>
#include <graphics/view.h>
#include <graphics/displayinfo.h>
#include "capture.h"
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
/* Pragma includes for register parameters */
#include <pragmas/exec_pragmas.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/gadtools_pragmas.h>
/* static function prototypes */
static BOOL TM_WindowSignal(struct TMData *);
static VOID TM_RemoveWindow(struct TMWindowInfo *);
static BOOL WindowIDCMP_CAPTUREM(struct TMData *, struct IntuiMessage *);
/* Mouse pointer data for disabled window */
#ifdef _DCC /* For DICE compatibiliity */
__chip UWORD WaitPointer[36] =
#else
UWORD __chip WaitPointer[36] =
#endif
{
0x0000, 0x0000,
0x0400, 0x07C0,
0x0000, 0x07C0,
0x0100, 0x0380,
0x0000, 0x07E0,
0x07C0, 0x1FF8,
0x1FF0, 0x3FEC,
0x3FF8, 0x7FDE,
0x3FF8, 0x7FBE,
0x7FFC, 0xFF7F,
0x7EFC, 0xFFFF,
0x7FFC, 0xFFFF,
0x3FF8, 0x7FFE,
0x3FF8, 0x7FFE,
0x1FF0, 0x3FFC,
0x07C0, 0x1FF8,
0x0000, 0x07E0,
0x0000, 0x0000,
};
/* Screen data */
/* Window data */
struct NewMenu newmenu_CAPTUREM[] =
{
{NM_TITLE, (UBYTE *)MENUTEXT_PROJECT, NULL, 0, 0, NULL}, /* Project */
{NM_ITEM, (UBYTE *)ITEMTEXT_CLEAR, NULL, 0, 0, (APTR) &tmobjectdata_CLEAR}, /* Clear */
{NM_ITEM, (UBYTE *)ITEMTEXT_LOAD, (UBYTE *)"L", 0, 0, (APTR) &tmobjectdata_LOAD}, /* Load... */
{NM_ITEM, (UBYTE *)ITEMTEXT_SAVE, (UBYTE *)"S", 0, 0, (APTR) &tmobjectdata_SAVE}, /* Save... */
{NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL}, /* --- */
{NM_ITEM, (UBYTE *)ITEMTEXT_ABOUT, NULL, 0, 0, (APTR) &tmobjectdata_ABOUT}, /* About... */
{NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL}, /* --- */
{NM_ITEM, (UBYTE *)ITEMTEXT_QUIT, (UBYTE *)"Q", 0, 0, (APTR) &tmobjectdata_QUIT}, /* Quit */
{NM_TITLE, (UBYTE *)MENUTEXT_SETTINGS, NULL, 0, 0, NULL}, /* Settings */
{NM_ITEM, (UBYTE *)ITEMTEXT_SETOUTPU, (UBYTE *)"1", 0, 0, (APTR) &tmobjectdata_SETOUTPU}, /* Set Output Link... */
{NM_ITEM, (UBYTE *)ITEMTEXT_SETINPUT, (UBYTE *)"2", 0, 0, (APTR) &tmobjectdata_SETINPUT}, /* Set Input Link... */
{NM_END, NULL, NULL, 0, 0, NULL}
};
/* Font data */
struct TextAttr topaz8 =
{
(STRPTR)"topaz.font", /* ta_Name */
8, /* ta_YSize */
FS_NORMAL, /* ta_Style */
0x0 /* ta_Flags */
};
/****** capture_tm.c/TM_Request *****************************
*
* NAME
* TM_Request -- display a message in a system requester.
*
* SYNOPSIS
* num = TM_Request(Window, Title, TextFormat, GadgetFormat,
* IDCMP_ptr, Arg1, Arg2, ...)
*
* LONG TM_Request(struct Window *, UBYTE *, UBYTE *, UBYTE *,
* ULONG *, APTR, ...);
*
* FUNCTION
* Calls EasyRequestArgs to display a message in a system
* requester without having to fill in an EasyStruct structure.
* This function uses a varargs calling convention.
*
* EasyRequestArgs has the capability to display more than one
* gadget by separating the GadgetText with the '|' character.
* Also printf style formatting may be used in the TextFormat
* and GadgetFormat strings. The formatting arguments should
* be added first for the TextFormat, then for the GadgetFormat.
*
* INPUTS
* Window = pointer to window (passed to EasyRequestArgs()).
* Title = title bar string (passed to EasyRequestArgs()).
* TextFormat = body text (passed to EasyRequestArgs()).
* GadgetFormat = gadget text (passed to EasyRequestArgs()).
* IDCMP_ptr = IDCMP value (passed to EasyRequestArgs()).
* Args = arguments (passed to EasyRequestArgs()).
*
* RESULT
* num = gadget number returned by EasyRequestArgs().
*
* EXAMPLE
* To display a requester with two choices:
*
* result = TM_Request(NULL, "Question", "Are you sure?",
* "OK|Cancel", NULL, NULL);
*
* NOTES
* The intuition library must be open before calling this
* function.
*
* BUGS
*
* SEE ALSO
* intuition.library/EasyRequestArgs()
*
**************************************************************
*
*/
LONG TM_Request(struct Window *Window, UBYTE *Title, UBYTE *TextFormat, UBYTE *GadgetFormat, ULONG *IDCMP_ptr, APTR Arg1, ...)
{
struct EasyStruct es;
es.es_StructSize = sizeof(struct EasyStruct);
es.es_Flags = 0;
es.es_Title = Title;
es.es_TextFormat = TextFormat;
es.es_GadgetFormat = GadgetFormat;
return(EasyRequestArgs(Window, &es, IDCMP_ptr, &Arg1));
}
/****** capture_tm.c/TM_Open *****************************
*
* NAME
* TM_Open -- initialize user-interface data.
*
* SYNOPSIS
* TMData = TM_Open(ErrorCode)
*
* struct TMData *TM_Open(ULONG *error);
*
* FUNCTION
* Creates an initializes a TMData structure. This
* includes allocating memory for a TMData structure,
* creating a message port for window IDCMP messages,
* and opening any fonts on disk.
*
* INPUTS
* error = pointer to ULONG to store an error number.
* Error numbers are defined in the _tm.h file.
*
* RESULT
* TMData = pointer to an initialized TMData structure
* or NULL if an error occurred.
*
* EXAMPLE
* if(!(TMData = TM_Open(&error)))
* {
* switch(error)
* {
* case TMERR_MEMORY:
* TM_Request(NULL, "Error", "Out of memory", "Abort", NULL, NULL);
* break;
* case TMERR_MSGPORT:
* TM_Request(NULL, "Error", "Error creating\nmessage port", "Abort", NULL, NULL);
* break;
* }
* CleanExit(NULL, RETURN_FAIL);
* }
*
* NOTES
* The intuition and gadtools libraries must be open before
* calling this function. If any fonts other than topaz 8
* and topaz 9 are used, the diskfont and graphics libraries
* must also be open.
*
* BUGS
*
* SEE ALSO
* TM_Close()
*
**************************************************************
*
*/
struct TMData *TM_Open(ULONG *error)
{
struct TMData *tmdata;
if(tmdata = AllocMem(sizeof(struct TMData), MEMF_CLEAR))
{
tmdata->Size = sizeof(struct TMData);
if(tmdata->WindowMsgPort = CreateMsgPort())
{
*error = TMERR_OK;
return(tmdata);
}
else
{
*error = TMERR_MSGPORT;
}
FreeMem(tmdata, sizeof(struct TMData));
}
else
{
*error = TMERR_MEMORY;
}
return(NULL);
}
/****** capture_tm.c/TM_Close *****************************
*
* NAME
* TM_Close -- frees user-interface data.
*
* SYNOPSIS
* TM_Close(TMData)
*
* VOID TM_Close(struct TMData *TMData);
*
* FUNCTION
* Frees resources allocated by TM_Open().
*
* INPUTS
* TMData = pointer to TMData structure returned by TM_Open.
*
* RESULT
*
* EXAMPLE
* if(TMData) TM_Close(TMData);
*
* NOTES
*
* BUGS
*
* SEE ALSO
* TM_Open()
*
**************************************************************
*
*/
VOID TM_Close(struct TMData *TMData)
{
if(TMData)
{
if(TMData->WindowMsgPort) DeleteMsgPort(TMData->WindowMsgPort);
FreeMem(TMData, TMData->Size);
}
}
/****** capture_tm.c/TM_EventLoop *****************************
*
* NAME
* TM_EventLoop -- waits for all events.
*
* SYNOPSIS
* TM_EventLoop(TMData)
*
* VOID TM_EventLoop(struct TMData *);
*
* FUNCTION
* Waits for any events to signal program. All IDCMP, ARexx,
* and a user signal messages received are sent to the
* appropriate signal function. A return value of TRUE from
* any of the signal functions will terminate the loop.
*
* INPUTS
* TMData = pointer to TMData structure returned by TM_Open.
*
* RESULT
*
* EXAMPLE
* TM_EventLoop(TMData);
*
* NOTES
* An event signal must be set up before calling TM_EventLoop.
* Either a window must be open, the SimpleRexx option selected,
* or a user signal set up.
*
* BUGS
*
* SEE ALSO
* TM_WindowSignal(), TM_ARexxSignal(), exec.library/Wait()
*
**************************************************************
*
*/
VOID TM_EventLoop(struct TMData *TMData)
{
BOOL done=FALSE, result;
ULONG windowsignal, signals;
windowsignal = 1L << TMData->WindowMsgPort->mp_SigBit;
while(!done)
{
signals = Wait(windowsignal | SIGBREAKF_CTRL_E);
if (signals & windowsignal)
{
if(result = TM_WindowSignal(TMData)) done = result;
}
if (signals & SIGBREAKF_CTRL_E)
{ HandleMidi( TMData );
}
}
}
/****** capture_tm.c/OpenScreen_Workbench *****************************
*
* NAME
* OpenScreen_Workbench -- Use the default public screen.
*
* SYNOPSIS
* success = OpenScreen_Workbench(TMData)
*
* BOOL OpenScreen_Workbench(struct TMData *);
*
* FUNCTION
* Locks the default public screen and gets its visual info. If the
* screen was already locked, it will be brought to front.
*
* INPUTS
* TMData = pointer to the TMData structure returned by TM_Open.
*
* RESULT
* success = TRUE if command was successfully completed.
* FALSE if not.
*
* EXAMPLE
* if(!(OpenScreen_Workbench(TMData)))
* {
* TM_Request(NULL, "Error", "Error opening screen", "Abort", NULL, NULL);
* CleanExit(TMData, RETURN_FAIL);
* }
*
* NOTES
*
* BUGS
*
* SEE ALSO
* CloseScreen_Workbench()
*
**************************************************************
*
*/
BOOL OpenScreen_Workbench(struct TMData *TMData)
{
if(ScreenInfo_Workbench.Screen)
{
ScreenToFront(ScreenInfo_Workbench.Screen);
return(TRUE);
}
else
{
if(ScreenInfo_Workbench.Screen = LockPubScreen(NULL))
{
if(ScreenInfo_Workbench.VisualInfo = GetVisualInfo(ScreenInfo_Workbench.Screen, TAG_DONE))
{
return(TRUE);
}
UnlockPubScreen(NULL, ScreenInfo_Workbench.Screen);
}
}
return(FALSE);
}
/****** capture_tm.c/CloseScreen_Workbench *****************************
*
* NAME
* CloseScreen_Workbench -- Free the default public screen.
*
* SYNOPSIS
* CloseScreen_Workbench(TMData)
*
* VOID CloseScreen_Workbench(struct TMData *);
*
* FUNCTION
* Unlocks the default public screen and frees the visual info.
* It's ok to re-close a screen that is already closed.
*
* INPUTS
* TMData = pointer to the TMData structure returned by TM_Open.
*
* RESULT
*
* EXAMPLE
* CloseScreen_Workbench(TMData);
*
* NOTES
*
* BUGS
*
* SEE ALSO
* OpenScreen_Workbench()
*
**************************************************************
*
*/
VOID CloseScreen_Workbench(struct TMData *TMData)
{
if(ScreenInfo_Workbench.VisualInfo)
{
FreeVisualInfo(ScreenInfo_Workbench.VisualInfo);
ScreenInfo_Workbench.VisualInfo = NULL;
}
if(ScreenInfo_Workbench.Screen)
{
UnlockPubScreen(NULL, ScreenInfo_Workbench.Screen);
ScreenInfo_Workbench.Screen = NULL;
}
}
/****** capture_tm.c/OpenWindow_CAPTUREM *****************************
*
* NAME
* OpenWindow_CAPTUREM -- Open window "CAPTUREM".
*
* SYNOPSIS
* success = OpenWindow_CAPTUREM(TMData)
*
* BOOL OpenWindow_CAPTUREM(struct TMData *);
*
* FUNCTION
* Opens the window with label "CAPTUREM"
* along with any gadgets it contains. If the window was already
* open, it will be brought to front.
*
* INPUTS
* TMData = pointer to the TMData structure returned by TM_Open.
*
* RESULT
* success = TRUE if command was successfully completed.
* FALSE if not.
*
* EXAMPLE
* if(!OpenWindow_CAPTUREM(TMData))
* {
* TMRequest(NULL, "Error", "Error opening window", "Abort", NULL, NULL);
* CleanExit(TMData, RETURN_FAIL);
* }
* NOTES
*
* BUGS
*
* SEE ALSO
* CloseWindow_CAPTUREM()
*
**************************************************************
*
*/
BOOL OpenWindow_CAPTUREM(struct TMData *TMData)
{
ULONG lasttag;
struct NewGadget ng;
if(WindowInfo_CAPTUREM.Window)
{
WindowToFront(WindowInfo_CAPTUREM.Window);
ActivateWindow(WindowInfo_CAPTUREM.Window);
return(TRUE);
}
else
{
WindowInfo_CAPTUREM.FirstGadget = NULL;
WindowInfo_CAPTUREM.ContextGadget = CreateContext(&WindowInfo_CAPTUREM.FirstGadget);
ng.ng_VisualInfo = ScreenInfo_Workbench.VisualInfo;
ng.ng_LeftEdge = 248;
ng.ng_TopEdge = 19+ScreenInfo_Workbench.Screen->BarHeight;
ng.ng_Width = 76;
ng.ng_Height = 16;
ng.ng_Flags = PLACETEXT_IN;
ng.ng_TextAttr = &topaz8;
ng.ng_GadgetText = (UBYTE *)GADGETTEXT_CLEAR; /* Clear */
ng.ng_GadgetID = ID_CLEAR;
ng.ng_UserData = (APTR) &tmobjectdata_CLEAR;
lasttag = GadgetInfo_CLEAR.MoreTags ? TAG_MORE : TAG_DONE;
GadgetInfo_CLEAR.Gadget = CreateGadget(BUTTON_KIND, WindowInfo_CAPTUREM.ContextGadget, &ng,
lasttag, GadgetInfo_CLEAR.MoreTags);
ng.ng_LeftEdge = 168;
ng.ng_GadgetText = (UBYTE *)GADGETTEXT_SEND; /* Send */
ng.ng_GadgetID = ID_SEND;
ng.ng_UserData = (APTR) &tmobjectdata_SEND;
lasttag = GadgetInfo_SEND.MoreTags ? TAG_MORE : TAG_DONE;
GadgetInfo_SEND.Gadget = CreateGadget(BUTTON_KIND, GadgetInfo_CLEAR.Gadget, &ng,
lasttag, GadgetInfo_SEND.MoreTags);
ng.ng_LeftEdge = 88;
ng.ng_GadgetText = (UBYTE *)GADGETTEXT_SAVE; /* Save... */
ng.ng_GadgetID = ID_SAVE;
ng.ng_UserData = (APTR) &tmobjectdata_SAVE;
lasttag = GadgetInfo_SAVE.MoreTags ? TAG_MORE : TAG_DONE;
GadgetInfo_SAVE.Gadget = CreateGadget(BUTTON_KIND, GadgetInfo_SEND.Gadget, &ng,
lasttag, GadgetInfo_SAVE.MoreTags);
ng.ng_LeftEdge = 8;
ng.ng_GadgetText = (UBYTE *)GADGETTEXT_LOAD; /* Load... */
ng.ng_GadgetID = ID_LOAD;
ng.ng_UserData = (APTR) &tmobjectdata_LOAD;
lasttag = GadgetInfo_LOAD.MoreTags ? TAG_MORE : TAG_DONE;
GadgetInfo_LOAD.Gadget = CreateGadget(BUTTON_KIND, GadgetInfo_SAVE.Gadget, &ng,
lasttag, GadgetInfo_LOAD.MoreTags);
ng.ng_LeftEdge = 208;
ng.ng_TopEdge = 3+ScreenInfo_Workbench.Screen->BarHeight;
ng.ng_Width = 116;
ng.ng_Height = 14;
ng.ng_Flags = PLACETEXT_LEFT;
ng.ng_GadgetText = (UBYTE *)GADGETTEXT_BYTESINB; /* Bytes in Buffer */
ng.ng_GadgetID = 0;
ng.ng_UserData = NULL;
lasttag = GadgetInfo_BYTESINB.MoreTags ? TAG_MORE : TAG_DONE;
GadgetInfo_BYTESINB.Gadget = CreateGadget(NUMBER_KIND, GadgetInfo_LOAD.Gadget, &ng,
GTNM_Border, TRUE,
lasttag, GadgetInfo_BYTESINB.MoreTags);
if(GadgetInfo_BYTESINB.Gadget)
{
lasttag = WindowInfo_CAPTUREM.MoreTags ? TAG_MORE : TAG_DONE;
if((WindowInfo_CAPTUREM.Window = OpenWindowTags(NULL,
WA_PubScreen, ScreenInfo_Workbench.Screen,
WA_Title, WINDOWTEXT_CAPTUREM, /* MIDI Capture */
WA_IDCMP, NULL,
WA_Gadgets, WindowInfo_CAPTUREM.FirstGadget,
WA_Left, 157,
WA_Top, 88,
WA_InnerWidth, 324,
WA_InnerHeight, 37,
WA_DragBar, TRUE,
WA_CloseGadget, TRUE,
WA_DepthGadget, TRUE,
WA_Activate, TRUE,
WA_SimpleRefresh, TRUE,
lasttag, WindowInfo_CAPTUREM.MoreTags)))
{
if((WindowInfo_CAPTUREM.Menu = CreateMenus(newmenu_CAPTUREM, TAG_DONE)))
{
if((LayoutMenus(WindowInfo_CAPTUREM.Menu, ScreenInfo_Workbench.VisualInfo, TAG_DONE)))
{
if((SetMenuStrip(WindowInfo_CAPTUREM.Window, WindowInfo_CAPTUREM.Menu)))
{
WindowInfo_CAPTUREM.Window->UserPort = TMData->WindowMsgPort;
ModifyIDCMP(WindowInfo_CAPTUREM.Window,
IDCMP_REFRESHWINDOW |
BUTTONIDCMP |
IDCMP_GADGETDOWN |
IDCMP_GADGETUP |
IDCMP_MENUPICK |
IDCMP_CLOSEWINDOW);
GT_RefreshWindow(WindowInfo_CAPTUREM.Window, NULL);
WindowInfo_CAPTUREM.Flags |= TMWF_OPENED;
return(TRUE);
}
}
FreeMenus(WindowInfo_CAPTUREM.Menu);
}
CloseWindow(WindowInfo_CAPTUREM.Window);
}
FreeGadgets(WindowInfo_CAPTUREM.FirstGadget);
}
}
return(FALSE);
}
/****** capture_tm.c/CloseWindow_CAPTUREM *****************************
*
* NAME
* CloseWindow_CAPTUREM -- Close window "CAPTUREM".
*
* SYNOPSIS
* CloseWindow_CAPTUREM(TMData)
*
* VOID CloseWindow_CAPTUREM(struct TMData *);
*
* FUNCTION
* Closes the window with label "CAPTUREM"
* and frees its resources. It's ok to re-close a window
* that is already closed.
*
* INPUTS
* TMData = pointer to the TMData structure returned by TM_Open.
*
* RESULT
*
* EXAMPLE
*
* NOTES
*
* BUGS
*
* SEE ALSO
* OpenWindow_CAPTUREM()
*
**************************************************************
*
*/
VOID CloseWindow_CAPTUREM(struct TMData *TMData)
{
TM_RemoveWindow(&WindowInfo_CAPTUREM);
}
/****** capture_tm.c/DisableWindow_CAPTUREM *****************************
*
* NAME
* DisableWindow_CAPTUREM -- disable input to window "CAPTUREM".
*
* SYNOPSIS
* DisableWindow_CAPTUREM(TMData)
*
* VOID DisableWindow_CAPTUREM(struct TMData *);
*
* FUNCTION
* Disables all input to window with label "CAPTUREM"
* and changes its mouse pointer.
*
* INPUTS
* TMData = pointer to the TMData structure returned by TM_Open.
*
* RESULT
*
* EXAMPLE
*
* NOTES
*
* BUGS
*
* SEE ALSO
* EnableWindow_CAPTUREM()
*
**************************************************************
*
*/
VOID DisableWindow_CAPTUREM(struct TMData *TMData)
{
if((WindowInfo_CAPTUREM.DisableCount == 0) && (WindowInfo_CAPTUREM.Flags & TMWF_OPENED))
{
InitRequester(&WindowInfo_CAPTUREM.Requester);
if(Request(&WindowInfo_CAPTUREM.Requester, WindowInfo_CAPTUREM.Window))
{
WindowInfo_CAPTUREM.Flags |= TMWF_DISABLED;
SetPointer(WindowInfo_CAPTUREM.Window, WaitPointer, 16, 16, -6, 0);
}
}
WindowInfo_CAPTUREM.DisableCount++;
}
/****** capture_tm.c/EnableWindow_CAPTUREM *****************************
*
* NAME
* EnableWindow_CAPTUREM -- enable input to window "CAPTUREM".
*
* SYNOPSIS
* EnableWindow_CAPTUREM(TMData)
*
* VOID EnableWindow_CAPTUREM(struct TMData *);
*
* FUNCTION
* Enables input to window with label "CAPTUREM"
* and clears its mouse pointer.
*
* INPUTS
* TMData = pointer to the TMData structure returned by TM_Open.
*
* RESULT
*
* EXAMPLE
*
* NOTES
*
* BUGS
*
* SEE ALSO
* DisableWindow_CAPTUREM()
*
**************************************************************
*
*/
VOID EnableWindow_CAPTUREM(struct TMData *TMData)
{
WindowInfo_CAPTUREM.DisableCount--;
if((WindowInfo_CAPTUREM.DisableCount == 0) && (WindowInfo_CAPTUREM.Flags & (TMWF_DISABLED | TMWF_OPENED)))
{
EndRequest(&WindowInfo_CAPTUREM.Requester, WindowInfo_CAPTUREM.Window);
WindowInfo_CAPTUREM.Flags &= ~TMWF_DISABLED;
ClearPointer(WindowInfo_CAPTUREM.Window);
}
}
/* *********************************************************** */
/* Static functions (available only to functions in this file) */
/* *********************************************************** */
static BOOL TM_WindowSignal(struct TMData *TMData)
{
BOOL done=FALSE;
BOOL result;
struct IntuiMessage *imessage;
while(imessage = GT_GetIMsg(TMData->WindowMsgPort))
{
if(imessage->IDCMPWindow == WindowInfo_CAPTUREM.Window)
{
WindowInfo_CAPTUREM.GT_IMsg = imessage;
if(result = WindowIDCMP_CAPTUREM(TMData, imessage)) done = result;
if(WindowInfo_CAPTUREM.GT_IMsg)
{
GT_ReplyIMsg(WindowInfo_CAPTUREM.GT_IMsg);
WindowInfo_CAPTUREM.GT_IMsg = NULL;
}
}
}
return(done);
}
static BOOL WindowIDCMP_CAPTUREM(struct TMData *TMData, struct IntuiMessage *imessage)
{
BOOL done=FALSE;
BOOL result;
switch(imessage->Class)
{
case IDCMP_REFRESHWINDOW: /* Always refresh */
GT_BeginRefresh(WindowInfo_CAPTUREM.Window);
Window_CAPTUREM_REFRESHWINDOW(TMData, imessage);
GT_EndRefresh(WindowInfo_CAPTUREM.Window, TRUE);
break;
case IDCMP_MENUPICK:
if(result = Window_CAPTUREM_MENUPICK(TMData, imessage)) done = result;
break;
case IDCMP_GADGETDOWN:
if(result = Window_CAPTUREM_GADGETDOWN(TMData, imessage)) done = result;
break;
case IDCMP_GADGETUP:
if(result = Window_CAPTUREM_GADGETUP(TMData, imessage)) done = result;
break;
case IDCMP_CLOSEWINDOW:
if(result = Window_CAPTUREM_CLOSEWINDOW(TMData, imessage)) done = result;
break;
}
return(done);
}
static VOID TM_RemoveWindow(struct TMWindowInfo *TMWindowInfo)
{
struct IntuiMessage *imessage;
struct Node *succ;
if(TMWindowInfo->Window)
{
if(TMWindowInfo->Menu)
{
ClearMenuStrip(TMWindowInfo->Window);
FreeMenus(TMWindowInfo->Menu);
TMWindowInfo->Menu = NULL;
}
if(TMWindowInfo->GT_IMsg)
{
GT_ReplyIMsg(TMWindowInfo->GT_IMsg);
TMWindowInfo->GT_IMsg = NULL;
}
if(TMWindowInfo->Window->UserPort)
{
Forbid();
imessage = (struct IntuiMessage *) TMWindowInfo->Window->UserPort->mp_MsgList.lh_Head;
while(succ = imessage->ExecMessage.mn_Node.ln_Succ)
{
if(imessage->IDCMPWindow == TMWindowInfo->Window)
{
Remove((struct Node *) imessage);
ReplyMsg((struct Message *) imessage);
}
imessage = (struct IntuiMessage *) succ;
}
TMWindowInfo->Window->UserPort = NULL;
ModifyIDCMP(TMWindowInfo->Window, 0L);
Permit();
}
CloseWindow(TMWindowInfo->Window);
TMWindowInfo->Window = NULL;
TMWindowInfo->Flags = 0;
}
if(TMWindowInfo->FirstGadget)
{
FreeGadgets(TMWindowInfo->FirstGadget);
TMWindowInfo->FirstGadget = NULL;
}
}